socket(네트워크 주소 체계, 소켓 타입, 프로토콜)소켓을 생성하는 함수. 네트워크 주소 체계, 소켓 타입, 프로토콜 로 초기화 할수 있다.
소켓 생성을 실패하면 -1 반환
네트워크 주소 체계: IPv4(AR_INET), IPv6(AF_INET6)
소켓 타입: TCP(SOCK_STREAM), UDP(SOCK_DGRAM)
프로토콜: TCP(IPPROPTO_TCP), UDP(IPPROTO_UDP)
bind(소켓 변수, 서버 주소 구조체, 서버 주소 구조체의 크기)서버 측의 소켓에 IP와 포트 번호를 할당하여 네트워크 인터페이스와 묶일 수 있도록 한다.
IPv4 소켓 주소 구조체(SOCKDADDR_IN): 소켓 주소체계(sin_family), 포트(sin_port), IPv4주소(sin_addr)
실제로 소켓 주소 구조체를 이요할 때는 IPv4 소켓 주소 구조체를 일반 소켓 구조체(SOCKADDR)로 변환하여
사용해야 한다.
listen(소켓 변수, 백 로그 큐의 크기)클라이언트로부터 연결 요청을 기다린다. 백 로그란 동시에 연결을 시도하는 최대 클라이언트 수를 의미
connect(소켓 변수, 서버 주소 구조체, 서버 주소 구조체 크기)클라이언트 측에서 서버에 연결을 요청한다. 소캣 생성에 실패하는 경우 -1을 반환
IPv4 소켓 주소 구조체: 소켓 주소체계(sin_family), 포트 번호(sin_port), IPv4주소(sin_addr)
실제로 소켓 주소 구조체를 이용할 때는 IPv4 소켓 주소 구조체를 일반 소켓 구조체(SOCKADDR)로 변환하여
사용해야 한다.
accept(소켓 변수, 클라이언트 주소 구조체 변수, 클라이언트 주소 구조체 크기)서버 측에서 클라이언트의 연결을 수락한다. accept() 함수 내부에서 클라이언트 주소를 설정한 뒤에
통신에 사용할 클라이언트의 소켓을 반환한다. 오류가 발생하는 경우 -1을 반환한다.
(반환받은 클라이언트 소켓과 서버 소켓을 이용하여 서로 통신할 수 있다.)
실제로 소켓 주소 구조체를 이용할 때는 IPv4 소켓 주소 구조체를 일반 소켓 구조체(SOCKADDR)로 변환하여
사용해야 한다.
send(소켓 변수, 문자열 버퍼, 문자열 버퍼 크기, 플래그)상대방에게 데이터를 보낸다. 특정한 소켓으로 문자열 버퍼에 담긴 내용을 전송
플래그는 특별한 경우가 아니라면 0을 설정 데이터 전송에 실패하는 경우 -1을 반환
recv(소켓 변수, 문자열 버퍼, 문자열 버퍼 크기, 플래그)데이터를 수신하여 특정 문자열 버퍼에 담는다. 플래그는 특별한 경우가 아니라면 0을 설정한다.
데이터 수신에 실패하는 경우 -1을 반환
closesocket(소켓 변수)열린 소켓을 닫는다.
위의 함수들을 리눅스 환경에서는 바로 이용해서 서버를 구축할 수 있다.
하지만 윈도우 환경에서 위와 같은 함수를 이용하기 위해서 Winsock2를 이용한다.
Winsock2Window Socket API 의 준말로 네트워크 프로그래밍을 위한 라이브러리이다.
Winsock을 사용하기 위해서는 ws2_32.dll파일을 사용 설정해야한다.
WSAStartup()함수 등을 통해 환경 설정을 진행해야 한다.
Winsock2는 윈도우를 위한 소켓 프로그래밍 라이브러리이므로 리눅스 프로그램에서는 사요할 필요가 없다.
WSAStartup(윈속 버전, WSA 데이터 변수)사용할 Winsock의 버전을 설정한다. 관련 설정 정보를 받기 위해 WSADATA 변수를 함꼐 넣는다.
WSACleanup()Winscok을 더 이상 사용하지 않음을 설정
in Mac
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>